--- import Layout from '../../layouts/Layout.astro'; import Header from '../../components/Header.astro'; import Footer from '../../components/Footer.astro'; import AppWrapper from '../../components/vue/AppWrapper.vue'; import ShareButton from '../../components/vue/ShareButton.vue'; import stacksData from '../../data/stacks.json'; export function getStaticPaths() { return stacksData.stacks.map(stack => ({ params: { id: stack.id }, props: { stack } })); } const { stack } = Astro.props; const pageUrl = Astro.url.href; const shareTitle = `${stack.name} - Vibery`; const shareDescription = stack.description; // Type info for badges const typeInfo: Record = { agent: { icon: 'ph-robot', color: 'blue' }, command: { icon: 'ph-terminal', color: 'green' }, mcp: { icon: 'ph-plugs-connected', color: 'orange' }, hook: { icon: 'ph-webhooks-logo', color: 'yellow' }, setting: { icon: 'ph-gear', color: 'purple' }, skill: { icon: 'ph-sparkle', color: 'pink' } }; ---

{stack.name}

{stack.description}

stack {stack.templates.length} templates

Install Stack

npx vibery install --stack {stack.id}

Templates ({stack.templates.length})

    {stack.templates.map((tpl: { type: string; name: string }) => { const info = typeInfo[tpl.type] || { icon: 'ph-file', color: 'gray' }; return (
  • {tpl.name} {tpl.type}
  • ); })}
{stack.credits && (
{stack.credits}
)} {stack.tags && (
{stack.tags.map((tag: string) => ( #{tag} ))}
)}